package sessionbeans;

import java.util.List;

import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import supportClass.IstanzaDTO;
import traveldreamEJB.Elemento;
import traveldreamEJB.Istanza;

/**
 * Session Bean implementation class CreaIstanzaSB
 */
@Stateless
public class CreaIstanzaSB implements CreaIstanzaSBLocal {

    /**
     * Default constructor. 
     */
    public CreaIstanzaSB() {
        // TODO Auto-generated constructor stub
    }

	@PersistenceContext
    private EntityManager em;

	@Override
	@RolesAllowed("ADMINS")
	public boolean creaIstanza(IstanzaDTO istanza) {
		// TODO Auto-generated method stub
		List<Elemento> elementi;
		Elemento elemento= null;
		Query allElemento = em.createNamedQuery("Elemento.findAll");
		
		elementi= allElemento.getResultList();
		for(Elemento ricercoEl: elementi)
			if(ricercoEl.getIdElemento()==istanza.getElemento().getIdElemento())
				elemento=ricercoEl;
		
		Query allIstanze = em.createNamedQuery("Istanza.findAll");
		List<Istanza> istanzeTmp= allIstanze.getResultList();
		
		for(Istanza tmpIst: istanzeTmp)
		{
			if(tmpIst.getElemento().getIdElemento()==istanza.getElemento().getIdElemento() &&
					tmpIst.getDataFine().equals(istanza.getDataFine()) &&
						tmpIst.getDataInizio().equals(istanza.getDataInizio()))
							return false;
		}
		Istanza newIstanza= new Istanza(istanza, elemento);
		em.persist(newIstanza);
		return true;
	}
	
	@Override
	@RolesAllowed("USERS")
	public void aggiornaIstanza(int idIstanza, int disponibilita){
		Query istanzaByID = em.createNamedQuery("Istanza.findIstanzaByID");
		istanzaByID.setParameter("idIstanza", idIstanza);
		Istanza tmp = (Istanza) istanzaByID.getSingleResult();
		
		tmp.setDisponibilita(disponibilita);
		em.persist(tmp);
	}

	@Override
	@RolesAllowed("ADMINS")
	public void modificaIstanza(IstanzaDTO istanza) {
		// TODO Auto-generated method stub	
		try{
			int idIstanza=istanza.getIdIstanza();
			int newPrezzo=0;
			int newDisponibilita=0;
			if(istanza.getPrezzo()>0) newPrezzo = istanza.getPrezzo();
			if(istanza.getDisponibilita()>0) newDisponibilita = istanza.getDisponibilita();
			Query istanzaDB = em.createNamedQuery("Istanza.findIstanzaByID");
			istanzaDB.setParameter("idIstanza", idIstanza);
			Istanza modIstanza= (Istanza) istanzaDB.getSingleResult();
			modIstanza.setPrezzo(newPrezzo);
			modIstanza.setDisponibilita(newDisponibilita);
			em.persist(modIstanza);			
		} catch (NullPointerException e)
		{
		}
		
	}

}
